1.7k words
Pandas 数据分析Pandas 简介Pandas是Python生态下的一个数据分析包,他对于Python数据分析的意义是十分重大的,他与NumPy的不同之处是支持图标和混杂数据运算的,而NumPy是基于数组构建的内容,他的各种图像生成也十分方便,并且支持各种数据存储文件、数据库、甚至Web中读取数据 Pandas 安装和NumPy的安装一样使用 1pip install pandas 命令安装即可 Series 类型数据Series是Pandas的核心数据结构之一,也是理解DataFrame的基础 Series的创建Series的中文翻译是系列,是一种类似于一维数组的结构,是数组和索引构成的 12import pandas as pdpd.Series(data, index = index) 在这两个参数中,data是数据源,可以是整数,字符串等,而默认索引就是数据的标签(label) 例如 12a = pd.Series([1, 2, 5, 3, 2])print(a) 需要注意的是Series的内部是基于NumPy的N维数组构建的,因此内部的数据需要统一 其次S...
1.1k words
vi/vim简单来说,vi和vim基本上都是所有Linux系统自带的编辑器,但是我们不排除在未来的某些极端条件下,需要利用vi/vim进行代码的编写或修改 其实vi和vim是一家子,他们都是多模式编辑器,而vim是vi的升级版,不仅支持vi的所有指令,还支持了语法高亮等特性,可视化操作甚至可以运行在其他操作系统上 因此我们主要介绍vim的使用 vim的基本概念我们知道vim是多模式编辑器,他的模式有非常多,对于我们初学者目前只需要掌握其中的三种即可 命令模式(command mode)、插入模式(insert mode)、末行模式(last line mode) 在命令模式下,可以控制光标移动,删除,移动,复制粘贴,或者进入其他两种模式 在插入模式下,才可以对文件内容进行操作,按[ESC]即可回到命令模式 在末行模式下,做文件的保存或者退出,也可以进行文件替换,查找,列出行号等操作,在命令模式下输入英文冒号即可进入 vim的基本操作进入vim,一般直接使用vim创建文件即可,例如 1vim test.c 进入之后是处于命令模式,需要切换到插入模式才可以进行输...
1.3k words
json模块json实际上是一种数据存储格式,是一种轻量级的数据交互格式,可以把他理解成一个特定格式的字符串以文件的形式存储起来 主要是在各个编程语言中交流的数据格式 从形式上看,json数据格式类似于Python的字典,列表,元组等数据容器 他长得像这样 123{"name":"summer","age":18}[{"name":"summer","age":18},{"name":"morty","age":14}] 我们可以利用一些工具将这些数据的格式层次显示清楚一点 在线JSON格式化工具 例如 当数据量巨大时,或者嵌套层数比较深的时候,这样的工具就比较方便了 json与Python数据的相互转化1234567import json # 导入json模块data = [{"name":"sum...
2.8k words
NumPyNumPy介绍在Python中有列表和数组模块,但是都不好用,列表的缺点是要保存每个对象的指针,如果你的列表有一百万个元素,他就有一百万个指针,而数组又只支持一维数组,并不适合数值运算 NumPy的模块支持数组和矩阵(向量)的运算,对机器学习算法比较友好,支持n维数组,有强大的数学运算对很多第三方库(SciPy,Pandas)都提供的底层支持 导入NumPy首先要确保你的安装了NumPy库 1pip install numpy 一般我们会给NumPy起别名为np NumPy数组序列生成数组生成数组最简单的方法就是用array()方法,他可以接收任意类型的数据(列表、元组等)作为数据源 需要注意的是,如果各种数据的数据类型不统一,但是数据类型可以相互转换,就会进行自动转换,浮点数和整数都存在时,就会将整数自动转化成浮点数 每一个数组都可以利用dtype数据(ArrName.dtype)来输出数组中数据的类型,如果没有显示指定(ArrName.astype()),数组就会自动推断数据类型 例如 12345678910import numpy as npprint(np._...
671 words
仿函数上回我们说到,优先队列的实现需要用到仿函数的特性 让我们再回到这里 这里我们发现他传入的用于比较的东西竟然是一个类模板,而不是我们所见到的函数 我们可以先创建一个类,用于比较大小 1234567struct Less{ bool operator()(int x, int y) { return x < y; }}; 这里我们创建了一个Less类,并且重载了圆括号,让他比较x<y是否成立 我们可以这样使用 12Less ls;cout << ls(1, 2) << endl; 结果是1 我们单单从cout这一句来看,ls就好像一个函数一样,可以比较1和2的大小,但是实际上是由Less创建的一个对象来比较的 我们把这一句还原 123Less ls;cout << ls(1, 2) << endl;cout << ls.operator()(1, 2) <<endl; 实际上后面这一句才是原本的样子 如果我们给这个...
967 words
LInux 权限管理Linux中有两种用户,root和普通用户 对于root用户,命令提示符是#,可以做任何事,不受限制 对于普通用户,命令提示符是$ 1su [用户名] 用这个命令可以切换登录用户 12su usersu root root可以省略,需要输入root用户的口令 文件我们可以通过ls -l命令查看文件夹内的详细信息 例如 我们依次来解释这些内容的意思 文件访问者我们可以看到在file1这个文件中有一串是root root 这里其实对应了两个身份,第一个root的位置表示该文件的所属用户,第二个root表示该文件的所属用户组,即这个文件属于哪个组 还有第三个身份就是其他用户,即不属于组的用户 文件类型与基本权限这里最前面有一串字符 -rw-rw-r– 这里其实是分块理解的,第一个字符表示文件类型 字符 说明 d 文件夹 - 普通文件 l 软连接(类似于快捷方式) b 块设备文件 p 管道文件 c 字符设备文件(输入输出设备) s 套接口文件 后面九个字符,三个三个一组,分别对应三种身份的各种权限 r表示有读权限 w表示...
949 words
生成器与迭代器我们已经学习了Python的对象,其实在Python中的所有东西都可以认为是对象,因此,我们就可以用生成器(generator)和迭代器(iterator)做到 生成器利用生成器表达式创建生成器一个最简单的创建生成器的方法与我们之前学的推导式其实差不多,与之不同的是,利用推导式时,他会将所有符合条件的列表元素全部加载到内存中,一旦数据量十分大,例如百万量级,内存就会吃不消了 我们可以利用生成器表达式来创造一个生成器,实际上就是把推导式的方括号变成圆括号,例如 12345678a = [x**2 for x in range(10) if x % 2 == 0]print(a)print(type(a))b = (x**2 for x in range if x % 2 == 0)print(b)print(type(b))print(list(b)) 利用类型转换可以将生成器转换为列表进行输出,除此之外,我们还可以利用全局内置函数next(),他会从生成器的第一个元素开始,每次返回当前元素的值,并且自动指向下一个元素,直到输出最后一个元素,会抛出StopIte...
866 words
priority_queue的基本介绍这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆(heap),而且是大根堆,即为堆顶为序列的最大值 堆(heap)堆实际上是一种特殊的二叉树,他最最特殊的点在于可以用数组来存储数据 普通的二叉树是不适合用数组来存储的因为可能会存在大量的空间浪费,而对于完全二叉树更适合用顺序结构存储 堆的概念与结构学术化的定义堆的概念过于难以理解,我们形象化的来理解他 一棵完全二叉树,他的任意一个节点值总是不大于或者不小于他的父节点的值 若堆顶为最大元素,则称为大根堆,若堆顶为最小元素,则称为小根堆 我们可以按照层次遍历的顺序对二叉树的所有节点进行标号,我们可以发现 $ parent = (child -1) / 2$ $child = parent*2+1$ 因此我们可以把它放入数组中,例如 这里我们演示了一个小根堆的逻辑结构和存储结构 对于堆的实现来说,他有两个主要的调整算法,向上调整和向下调整算法 当构建堆时,我们采用向上调整算法,...